package com.login_php.service;

import java.io.Serializable;

import org.apache.log4j.Logger;

import com.login_php.actions.BaseServiceAction;
import com.login_php.domain.commons.TipoUsuario;
import com.login_php.domain.commons.Usuario;
import com.login_php.domain.user.Credential;
import com.login_php.domain.user.JsonReturn;
import com.login_php.domain.user.UserJson;
import com.login_php.manager.UsuarioEng;
import com.login_php.manager.exception.PasswordDosentMatchException;
import com.login_php.manager.exception.UserDontExistsException;
import com.login_php.services.TipoUsuarioService;

public class LoginService extends BaseServiceAction {

	private static final long serialVersionUID = -5313117385068419682L;

	private static final Logger LOG = Logger.getLogger(LoginService.class);
	
	private String usuario;
	private String senha;
	private JsonReturn retorno;
	
	@Override
	public String doExecute() {
		
		Credential credential = new Credential();
		
		credential.setSenha(senha);
		credential.setUser(usuario);
		
		retorno = new JsonReturn();
		Usuario logedUser = null;
		
		try{
			logedUser = getAplicationEng().getUsuarioEng().login(credential);
			retorno.setSuccess(true);
		}catch(UserDontExistsException userException){
			retorno.setMessage(userException.getMessage());
			retorno.setSuccess(false);
		} catch (PasswordDosentMatchException passwordExeption) {
			retorno.setMessage(passwordExeption.getMessage());
			retorno.setSuccess(false);
		}catch (Exception e) {
			LOG.error("Ocorreu um erro ao efeturar o login",e);
			retorno.setMessage("Ocorreu um erro ao efeturar o login");
			retorno.setSuccess(false);
		}
		
		if(retorno.isSuccess() && logedUser != null){
			UserJson jsonUser = new UserJson();
			TipoUsuario tipo = TipoUsuarioService.getTipoUsuarioById(logedUser.getTipoUsuario());
			jsonUser.setTipoUsuario((tipo != null) ? tipo.getNome() : "");
			jsonUser.setUser(logedUser.getUsuario());
			jsonUser.setId(logedUser.getId());
			jsonUser.setTipoUsuarioId(logedUser.getTipoUsuario());
			retorno.setUsuario(jsonUser);
		}
		
		return SUCCESS;
	}

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public JsonReturn getRetorno() {
		return retorno;
	}

	public void setRetorno(JsonReturn retorno) {
		this.retorno = retorno;
	}
	
	@Override
	protected boolean isLoginRequired() {
	
		return false;
	}

}
